// pages/loseAndReceive/index.js
const app = getApp();
const db = wx.cloud.database();
import {
	goBack,
	needLogin,
	uploadFiles,
	tactful
} from '../../Utils/Utils'

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		CustomBar: app.globalData.CustomBar, // 头部整体高度
		StatusBar: app.globalData.StatusBar, // 状态栏高度
		windowHeight: app.globalData.windowHeight, // 屏幕整体高度
		scrollHeight: 0, // scroll高度
		textAreaValue: "", // 用来保存用户提交的表单域里的内容
		type: "", // 物品类型
		site: "", // 交易地点或方式 
		siteFoshow: "", // 用于前端显示数据, 不用往数据库提交
		price: "", // 价格
		quality: "", // 成色
		beUnusedArray: ['全新', '几乎全新', '轻微使用痕迹', '明显使用痕迹'],
		beUnusedIndex: 0, // beUnusedArray下标
		count: 0, // 字数

		priceShow: false, // 是否弹出价格组件
		PopupShow: false, // 是否弹出Popup组件	
		EditTextShow: false, // 是否显示容器组件
		chooseTypeShow: false, // 是否显示选择物品类型组件
		custom_style: "height: 37%;bottom: 0;",
		//当前的图片列表, uploader案例中保存上传图片的
		files: [],
		// 允许上传的文件扩展名
		ext: app.globalData.ext || [],
		// 物品类型, 为了传递给子组件
		array: [{
				id: 1,
				current: true,
				name: '书本/文件'
			},
			{
				id: 2,
				current: false,
				name: '首饰/挂饰'
			},
			{
				id: 3,
				current: false,
				name: '数码产品'
			},
			{
				id: 4,
				current: false,
				name: '衣服/鞋帽'
			},
			{
				id: 5,
				current: false,
				name: '手袋/挎包'
			},

			{
				id: 6,
				current: false,
				name: '其它'
			}
		],
	},

	goBack,

	editText: function (e) { // 获取表单域内容
		let that = this
		that.setData({
			textAreaValue: e.detail.value
		})
	},

	optionBombBox2Show: function (param) {
		let that = this
		let temp = that.data.BombBox2Show
		let temp2 = that.data.BombBoxShow
		if (temp || temp2) {
			return
		}
		that.setData({
			BombBox2Show: true,
			BombBox2text: param
		})
		setTimeout(() => {
			that.setData({
				BombBox2Show: false,
			})
		}, 3000)
	},

	openBombBox: function (param) {
		let that = this
		that.setData({
			BombBoxShow: true,
			BombBoxText: param
		})
	},

	closeBombBox: function () {
		let that = this
		that.setData({
			BombBoxShow: false,
		})
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad: function (options) {
		let that = this
		that.setData({
			selectFile: that.selectFile.bind(that),
			uplaodFile: that.uplaodFile.bind(that),
			scrollHeight: that.data.windowHeight - that.data.CustomBar,
		})
	},

	goEditText() { // 跳转编辑交易地点页面
		let that = this
		wx.navigateTo({
			url: '../EditText/index',
			events: {
				getSite: function (data) {
					that.setData({
						site: data.detailInfo,
						siteFoshow: data.terseInfo
					})
				},
			},
			success: function (res) {
				res.eventChannel.emit("getData", {
					name: "site",
					master: "beUsedToSell",
					maxlength: 50,
					textPlaceholder: "请输入交易地点"
				})
			}
		})

	},

	bindPickerChange: function (e) { // 物品成色模块确定事件
		let that = this
		let {
			value
		} = e.detail
		let temp = that.data.beUnusedArray[value]
		that.setData({
			quality: temp
		})
	},

	bindPickerClose: function () { // 物品成色模块取消事件
	},

	openEditPrice: function () { // 打开修改价格组件
		this.setData({
			priceShow: true,
		})
	},

	EditPrice: function (e) { // 价格组件输入事件
		let {
			value
		} = e.detail
		let temp = parseFloat(value)
		if (!temp) {
			temp = ''
		}
		this.setData({
			price: temp,
		})
	},

	CloseEditPrice: function () { // 价格组件取消事件
		this.setData({
			priceShow: false,
			price: ''
		})
	},

	EnsureEditPrice: function () { // 价格组件确认事件
		this.setData({
			priceShow: false,
		})
	},

	Popup(e) { // 打开底部交易地点或方式弹出层
		let {
			name
		} = e.currentTarget.dataset
		if (name == "EditTextShow") {
			this.setData({
				EditTextShow: true,
				PopupShow: true,
			})
		} else if (name == "chooseTypeShow") {
			this.setData({
				chooseTypeShow: true,
				PopupShow: true,
			})
		}

	},


	CloseEditText: function (param) { // 关闭底部交易地点或方式
		let that = this
		if (!param.detail) {
			that.setData({
				PopupShow: false
			})
			setTimeout(() => {
				that.setData({
					EditTextShow: false,
				})
			}, 600)
			return 0
		}

		let temp = param.detail.param
		if (temp.length > 5) {
			that.setData({
				siteFoshow: temp.substring(0, 5) + ' ...',
			})
		} else {
			that.setData({
				siteFoshow: temp
			})
		}
		that.setData({
			site: temp,
			PopupShow: false
		})
		setTimeout(() => {
			that.setData({
				EditTextShow: false,
			})
		}, 600)
	},

	onBeforeEnter(res) { // 	打开底部交易地点或方式弹出层之前触发			
	},

	onAfterLeave(res) { // 关闭底部交易地点或方式弹出层之后触发
		let that = this
		setTimeout(() => {
			that.setData({
				chooseTypeShow: false,
				EditTextShow: false
			})
		}, 100)
	},



	CloseChooseType: function (e) { // 关闭底部物品类型弹出组件
		let that = this
		let {
			param
		} = e.detail
		if (param) {
			that.setData({
				type: param,
				PopupShow: false
			})
			setTimeout(() => {
				that.setData({
					chooseTypeShow: false,
				})
			}, 600)

			return 0
		}
		that.setData({
			PopupShow: false,
		})
		setTimeout(() => {
			that.setData({
				chooseTypeShow: false,
			})
		}, 600)
	},

	editText: function (e) { // 获取表单域内容
		let maxlength = this.data.maxlength
		let temp = 0
		temp = e.detail.value.length > maxlength ? maxlength : e.detail.value.length
		let that = this
		that.setData({
			textAreaValue: e.detail.value,
			count: temp
		})
	},

	// 从这里开始到我结束的地方都是 UI 库里面的案例函数 

	previewImage: function (e) {
		wx.previewImage({
			current: e.currentTarget.id, // 当前显示图片的http链接
			urls: this.data.files // 需要预览的图片http链接列表
		})
	},

	selectFile(files) { // 选择图片时的过滤函数，返回true表示图片有效
		for (f of files.tempFilePaths) {
			let fileExt = f.split(".")[1].toString().toLowerCase();
			if (this.data.ext.indexOf(fileExt) < 0) {
				this.optionBombBox2Show("暂不支持")
				return false
			}
		}
		// 返回false可以阻止某次文件上传
	},

	uplaodFile(files) { // 图片上传的函数，返回Promise，Promise的callback里面必须resolve({urls})表示成功，否则表示失败
		const that = this;
		// 文件上传的函数，返回一个promise
		return new Promise((resolve, reject) => {
			const tempFilePaths = files.tempFilePaths;
			that.setData({
				files: tempFilePaths
			})
			var object = {};
			object['urls'] = tempFilePaths;
			resolve(object);
		})
	},
	/**
	 * 取消某个图片的上传
	 * @param {} detail 取消指定索引的图片上传
	 */
	binddelete(detail) {
		let datafiles = this.data.files;
		datafiles.splice(detail.detail.index, 1)
		this.setData({
			files: datafiles
		})
	},

	uploadError(e) { // 1表示图片超过大小限制，type为2表示选择图片失败，type为3表示图片上传失败。
		console.log('upload error', e.detail)
	},

	uploadSuccess(e) { // detail为{urls}，urls为upload函数上传成功返回的urls参数
		console.log('upload success', e.detail)
	},

	// 从这里结束 

	/**
	 * 发布检测
	 */
	checkUpload() {
		if (this.data.textAreaValue.trim().replace("\n", "") == "") {
			this.optionBombBox2Show("内容不能为空")
			return false;
		} else if (this.data.site == "") {
			this.optionBombBox2Show("请输入交易地点")
			return false;
		}
		if(this.data.textAreaValue.length>500){
			this.optionBombBox2Show("不能超出500字")
			return false;
		}
		return true;
	},

	/**
	 * 发布文章
	 */
	publish() {
		let that = this;
		if (!that.checkUpload()) {
			return false;
		}
		// 需要登陆
		
		let tempText = tactful(this.data.textAreaValue)		// 校验字符串
		needLogin(getCurrentPages().__route__, () => {
			// 将图片上次到云存储中
			uploadFiles(this.data.files, "beUsedToSell", (res) => {
				// res 为上传的图片的路径信息
				that.openBombBox("上传中...")
				// 上传 失物招领 的内容
				db.collection("publishInfo").add({
					data: {
						// type 1 我要表白 2 闲置出让 3 失物招领
						type: 2,
						isOver: 0,
						text: tempText,
						pictures: res,
						itemType: this.data.type,
						tradeaddress: this.data.site,
						price: this.data.price,
						quality: this.data.quality,
						time: new Date(),
						timestamp: new Date().getTime(),
					}
				}).then(res => {
					that.closeBombBox()
					that.optionBombBox2Show("上传成功！")
					setTimeout(() => {
						that.goBack()
					}, 500)
				}).catch(err => {
					that.closeBombBox()
					that.optionBombBox2Show("上传失败！")
				})
			})
		})
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady: function () {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow: function () {

	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide: function () {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload: function () {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh: function () {

	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom: function () {

	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage: function () {

	}
})